跳到主要内容

Rust 所有权

阐述

  1. Rust 中每一个值都被一个变量所拥有,该变量被称为值的所有者
  2. 一个值同时只能被一个变量所拥有,或者说一个值只能拥有一个所有者
  3. 当所有者(变量)离开作用域范围时,这个值将被丢弃

赋值时的行为

在栈上分配的类型赋值给别的变量时发生的是拷贝,而在堆上分配的类型赋值给别的变量时发生的是移动。

函数传值的行为

将值传给函数时也会发生移动。但如果函数类型声明为 &T,则并不拥有该实参的所有权,而只是创建了一个引用。如果还想要修改这个变量,就需要声明为可变引用。

可变引用同一作用域只能存在一个,并且也不能同时存在可变引用和不可变引用。

实例

这是栈上的拷贝:

let x = 5;
let y = x;

println!("x = {}, y = {}", x, y);

这段代码会报错:

let s1 = String::from("hello");
let s2 = s1;

println!("{}, world!", s1);

而要拷贝字符串需要:

let s1 = String::from("hello");
let s2 = s1.clone();

println!("s1 = {}, s2 = {}", s1, s2);

性质

相关内容

参考文献